package gestion.camping.dao.impl;

import gestion.camping.dao.GenericDAO;
import gestion.camping.dto.FraisReservation;

import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;

/**
 * Permet la lecture, la modification, l'ajout ou la suppresion en base des enregistrement de la table Personne
 * 
 * @author Gombert Damien
 * @author Foucras Melanie
 * @author Germa Romain
 * 
 * @version 1.0
 */
public class FraisReservationDao extends GenericDAO<FraisReservation>{

	public FraisReservationDao(Connection conn) {
		super(conn);
	}

	
	@Override
	public FraisReservation create(FraisReservation obj) {
		
		try {
			Statement smt = connect.createStatement();
			
			//On prépare la requête d'insertion
			String rqt = String.format("INSERT INTO FRAIS_RESERVATION VALUES(%1$s, '%2$s')",
										obj.getAnnee(), obj.getPrix());
			
			//On trace la requête dans la console
			System.out.println(rqt);
			
			//ON effectue l'insertion en base de données		
			smt.executeUpdate(rqt);
			
			//On ferme la transaction
			smt.close();

									
		} catch (SQLException e) {
			gestionErreurSQL(e);
		}
		
		
		return obj;
	}

	@Override
	public boolean delete(FraisReservation obj) {
		return false;
	}

	@Override
	public FraisReservation update(FraisReservation obj) {
				
		try {
			Statement smt = connect.createStatement();
			
			//On récupère le id qu'aura notre futur enregistrement
			//TODO Controler la date version
			
			//On prépare la requête de modification
			String rqt = String.format("UPDATE FRAIS_RESERVATION SET FRAIS_RESERVATION_PRIX = %1$s " +
										"			                 WHERE FRAIS_RESERVATION_ANNEE = %2$s",
										obj.getPrix(),
										obj.getAnnee());
			
			//On trace la requête dans la console
			System.out.println(rqt);
			
			//ON effectue l'insertion en base de données		
			smt.executeUpdate(rqt);
			
			//On ferme la transaction
			smt.close();
									
		} catch (SQLException e) {
			gestionErreurSQL(e);
		}
		
		return obj;
	}

	@Override
	public FraisReservation find(int annee) {
		FraisReservation dto = new FraisReservation();
		
		try {
			
			Statement smt = connect.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
			
			String rqt = "SELECT * FROM FRAIS_RESERVATION F WHERE F.FRAIS_RESERVATION_ANNEE="+ annee;
			
			//Execution de la requ�te
			ResultSet res = smt.executeQuery(rqt);		
			
			// si il y a des r�sultat, on se positionne sur le premier enregistrement
			if(res.first()){
				// Et on initialise le dto
				dto.setAnnee(annee);
				dto.setPrix(res.getInt("FRAIS_RESERVATION_PRIX"));
			}
			
			//On ferme la transaction
			smt.close();
		} catch (SQLException e) {
			e.printStackTrace();
		}

		return dto;
	}
	
	/**
	 * Récupère l'ensemble des personnes
	 * 
	 * @return toutes les personnes présente dans la base 
	 */
	public List<FraisReservation> findAllFraisReservation(){
		List<FraisReservation> listFraisReservation = new ArrayList<FraisReservation>();
		
		try {
			
			Statement smt = connect.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
			
			String rqt = "SELECT * FROM FRAIS_RESERVATION F";
			
			//Execution de la requ�te
			ResultSet res = smt.executeQuery(rqt);		
			
			//On crée un dtoPersonne temporaire
			FraisReservation dto;
			
			// Tant qu'il y a des résultat
			while(res.next()){
				//on initialise le dto
				dto = new FraisReservation();
				dto.setAnnee(res.getInt("FRAIS_RESERVATION_ANNEE"));
				dto.setPrix(res.getInt("FRAIS_RESERVATION_PRIX"));
								
				//Et on ajoute le dto à la liste
				listFraisReservation.add(dto);
			}
			
			//On ferme la transaction
			smt.close();
						
		} catch (SQLException e) {
			e.printStackTrace();
		}
		
		return listFraisReservation;
	}
	
}
